Enterprises run large numbers of desktops (real or virtual through a datacenter), each typically having a number of different desktop applications. It is a cumbersome but necessary task to keep each of these desktop applications on each desktop running and updated. This task typically involves testing a range of program features for each application on each desktop. This process also needs to be repeated periodically, for example each time there is an application upgrade or a change to the operating system.